package com.personal.system.controller;

import com.personal.system.service.WebSocket.WebSocketServer;
import com.personal.system.constant.redis.RedisService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.io.IOException;

@Api(tags = "webSocket控制器")
@RestController
@RequestMapping("/webSocket")
public class WebSocketController {

    @Resource
    private WebSocketServer webSocket;

    @Resource
    private RedisService redisService;

    @ApiOperation("发送消息给用户")
    @PostMapping("/sentMessage")
    public void sentMessage(String userId,String message){
        try {
            webSocket.sendMessageByUserId(userId,message);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @ApiOperation("获取幂等powerToken")
    @GetMapping("/powerToken")
    public String getToken() {
        // 获取用户信息（这里使用模拟数据）
        // 注：这里存储该内容只是举例，其作用为辅助验证，使其验证逻辑更安全，如这里存储用户信息，其目的为:
        // - 1)、使用"token"验证 Redis 中是否存在对应的 Key
        // - 2)、使用"用户信息"验证 Redis 的 Value 是否匹配。
        String userInfo = "baJie";

        return redisService.generateToken(userInfo);
    }

    @ApiOperation("测试幂等性")
    @PostMapping("/test")
    public String test(@RequestHeader(value = "powerToken") String powerToken) {
        // 获取用户信息（这里使用模拟数据）
        String userInfo = "baJie";
        // 根据 Token 和与用户相关的信息到 Redis 验证是否存在对应的信息
        boolean result = redisService.validToken(powerToken, userInfo);
        // 根据验证结果响应不同信息
        return result ? "正常调用" : "重复调用";
    }

}
